

public class ExpressionEvaluator {


	public static int evaluate( BinaryTreeNode expr ) {
		String op = (String)expr.getElement();

		if ( op.equals( "+" ) ) {
			return evaluate( expr.getLeft() ) + evaluate( expr.getRight() );
		}
		else if ( op.equals( "-" ) ) {
			return evaluate( expr.getLeft() ) - evaluate( expr.getRight() );
		}
		else if ( op.equals( "*" ) ) {
			return evaluate( expr.getLeft() ) * evaluate( expr.getRight() );
		}
		else if ( op.equals( "/" ) ) {
			return evaluate( expr.getLeft() ) / evaluate( expr.getRight() );
		}
		else {
			return Integer.parseInt( op );
		}
	}

	
	public static void main( String[] args ) {

		// 14 * 22 / (2 + 3) * (98 - 32) + 6
		
		BinaryTreeNode expr = new BinaryTreeNode( "+",
								new BinaryTreeNode( "*",
									new BinaryTreeNode( "/",
										new BinaryTreeNode( "*",
											new BinaryTreeNode( "14" ),
											new BinaryTreeNode( "22" )
										),
										new BinaryTreeNode( "+",
											new BinaryTreeNode( "2" ),
											new BinaryTreeNode( "3" )
										)						
									),
									new BinaryTreeNode( "-",
										new BinaryTreeNode( "98" ),
										new BinaryTreeNode( "32" )
									)
								),
								new BinaryTreeNode( "6" )
							  );

		System.out.println( "14 * 22 / (2 + 3) * (98 - 32) + 6 = " +
							evaluate( expr ) );
	}

}
